package com.chang.product.feign;

import com.chang.common.to.SkuReductionTo;
import com.chang.common.to.SpuBoundTo;
import com.chang.common.utils.R;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;

/*
 * @Author Changzhenxi
 * @Date 2024/3/21 15:53
 * @Description This is description of method
 * @Since version 1.0
 */
@FeignClient("coupon")
public interface CouponFeignService {

    /*
     * @Author Chang
     * @Date 2024/3/21 16:25
     * @Description 远程调用传递对象原理原理:
     * 1,将这个对象转化为json对象(需要有@RequestBody注解)
     * 2,找到注册中心的对应服务coupon,并按照给定映射路径coupon/spubounds/save发送请求 发送请求时会将转化的json对象,放在请求体位置,然后再发送请求
     * 3,coupon服务收到请求,此时请求提中带json数据,而coupon服务中coupon/spubounds/save路径的方法请求参数格式为(@RequestBody SpuBoundsEntity spuBounds)
     *   @RequestBody又将请求体中的json对象转换成为SpuBoundsEntity,
     *   所以,只要传递对象中的属性名和接受对象的属性名对应,哪怕这边传递的是SpuBoundTo 对方接受的对象为SpuBoundsEntity 也可以正常传递
     * @Param [spuBoundTo]
     * @Return com.chang.common.utils.R
     * @Since version 1.0
     */
    @PostMapping("coupon/spubounds/save")
    R saveSpuBounds(@RequestBody SpuBoundTo spuBoundTo);

    @PostMapping("coupon/skufullreduction/saveInfo")
    R saveSkuReduction(@RequestBody SkuReductionTo SkuReductionTo);
}
